package cn.mujiankeji.mbrowser.功能.播放框.模型

import androidx.compose.runtime.mutableStateMapOf

abstract class 播放内容来源<T>(){

    // 标题 -- 所对应的播放源
    var 播放源列表 = mutableStateMapOf<String,List<T>>()


    /**
     * @param loadStateCallback 加载过程的内容返回
     */
    abstract suspend fun 取播放文件(item : T,loadStateCallback : (String)->Unit) : 播放文件信息
    abstract fun 取标题(item : T) : String // 可能相对比较块吧？

    abstract suspend fun 预加载(item : T)

    fun 取列表(源分类名称 : String) : List<T>?{
        return 播放源列表.get(源分类名称)
    }

    companion object{
        fun 单例(地址 : String,协议头: Map<String, String>?=null) = object : 播放内容来源<String>(){
            init {
                播放源列表.set("MBROWSER", listOf(地址))
            }
            override suspend fun 取播放文件(
                item: String,
                loadStateCallback: (String) -> Unit
            ): 播放文件信息 {
                return 播放文件信息(地址 = 地址, 标题 = 地址, 协议头 = 协议头)
            }

            override fun 取标题(item: String): String {
                return item
            }

            override suspend fun 预加载(item: String) {
                // 无需
            }

        }
        fun 多例(vararg 地址 : String) = object : 播放内容来源<String>(){
            init {
                播放源列表.set("MBROWSER", 地址.toList())
            }
            override suspend fun 取播放文件(
                item: String,
                loadStateCallback: (String) -> Unit
            ): 播放文件信息 {
                return 播放文件信息(地址 = item, 标题 = item, 协议头 = null)
            }

            override fun 取标题(item: String): String {
                return item
            }

            override suspend fun 预加载(item: String) {
                // 无需
            }

        }

    }

}
